<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>C++ exceptions</title>
    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
    <link rel="start" href="index.html" title="Berkeley DB Upgrade Guide" />
    <link rel="up" href="upgrade_4_1_toc.html" title="Chapter 9. Upgrading Berkeley DB 4.0 applications to Berkeley DB 4.1" />
    <link rel="prev" href="upgrade_4_1_java.html" title="Java exceptions" />
    <link rel="next" href="upgrade_4_1_app_dispatch.html" title="Application-specific logging and recovery" />
  </head>
  <body>
    <div xmlns="" class="navheader">
      <div class="libver">
        <p>Library Version 12.1.6.2</p>
      </div>
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">C++ exceptions</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="upgrade_4_1_java.html">Prev</a> </td>
          <th width="60%" align="center">Chapter 9. Upgrading Berkeley DB 4.0 applications to Berkeley DB 4.1</th>
          <td width="20%" align="right"> <a accesskey="n" href="upgrade_4_1_app_dispatch.html">Next</a></td>
        </tr>
      </table>
      <hr />
    </div>
    <div class="sect1" lang="en" xml:lang="en">
      <div class="titlepage">
        <div>
          <div>
            <h2 class="title" style="clear: both"><a id="upgrade_4_1_cxx"></a>C++ exceptions</h2>
          </div>
        </div>
      </div>
      <p>With default flags, the C++ <a href="../api_reference/CXX/env.html" class="olink">DbEnv</a> and <a href="../api_reference/CXX/db.html" class="olink">Db</a> classes
can throw exceptions from their constructors.  For example, this can
happen if invalid parameters are passed in or the underlying C
structures could not be created.  If the objects are created in an
environment that is not configured for exceptions (that is, the
<a href="../api_reference/CXX/envcreate.html#env_DB_CXX_NO_EXCEPTIONS" class="olink">DB_CXX_NO_EXCEPTIONS</a> flag is specified), errors from the
constructor will be returned when the handle's open method is called.</p>
      <p>In addition, the behavior of the <a href="../api_reference/CXX/env.html" class="olink">DbEnv</a> and <a href="../api_reference/CXX/db.html" class="olink">Db</a>
destructors has changed to simplify exception handling in applications.
The destructors will now close the handle if the handle's close method
was not called prior to the object being destroyed.  The return value
of the call is discarded, and no exceptions will be thrown.
Applications should call the close method in normal situations so any
errors while closing can be handled by the application.</p>
      <p>This change allows applications to be structured as follows:</p>
      <pre class="programlisting">try {
	DbEnv env(0);
	env.open(/* ... */);
	Db db(&amp;env, 0);
	db.open(/* ... */);
	/* ... */
	db.close(0);
	env.close(0);
} catch (DbException &amp;dbe) {
	// Handle the exception, the handles have already been closed.
}</pre>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="upgrade_4_1_java.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="upgrade_4_1_toc.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="upgrade_4_1_app_dispatch.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">Java exceptions </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> Application-specific logging and recovery</td>
        </tr>
      </table>
    </div>
  </body>
</html>
